package com.entmanage.base.achievement.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.entmanage.common.utils.SecurityUtils;
import com.entmanage.base.achievement.mapper.AchievementCasesMapper;
import com.entmanage.base.achievement.domain.AchievementCases;
import com.entmanage.base.achievement.service.IAchievementCasesService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 成果展示案例Service业务层处理
 *
 * @author lsq
 * @date 2025-08-22
 */
@Service
public class AchievementCasesServiceImpl implements IAchievementCasesService
{
    @Autowired
    private AchievementCasesMapper achievementCasesMapper;

    /**
     * 查询成果展示案例
     *
     * @param id 成果展示案例主键
     * @return 成果展示案例
     */
    @Override
    public AchievementCases selectAchievementCasesById(Long id)
    {
        return achievementCasesMapper.selectAchievementCasesById(id);
    }

    /**
     * 查询成果展示案例列表
     *
     * @param achievementCases 成果展示案例
     * @return 成果展示案例
     */
    @Override
    public List<AchievementCases> selectAchievementCasesList(AchievementCases achievementCases)
    {
        return achievementCasesMapper.selectAchievementCasesList(achievementCases);
    }

    /**
     * 新增成果展示案例
     *
     * @param achievementCases 成果展示案例
     * @return 结果
     */
    @Override
    public int insertAchievementCases(AchievementCases achievementCases)
    {
        // 保存用户和部门id
        achievementCases.setUserId(SecurityUtils.getUserId());
        achievementCases.setDeptId(SecurityUtils.getDeptId());

        // ✅ 先判断是不是 admin，不是再看是不是 common
        if (SecurityUtils.hasRole("admin")) {
            // admin 可以自由设置 isPublished，默认 0（未发布）
            if (achievementCases.getIsPublished() == null) {
                achievementCases.setIsPublished(0);
            }
        } else if (SecurityUtils.hasRole("common")) {
            // 普通用户强制设为“审核中”
            achievementCases.setIsPublished(2);
        } else {
            // 其他情况默认未发布
            achievementCases.setIsPublished(0);
        }

        return achievementCasesMapper.insertAchievementCases(achievementCases);
    }

    /**
     * 修改成果展示案例
     *
     * @param achievementCases 成果展示案例
     * @return 结果
     */
    @Override
    public int updateAchievementCases(AchievementCases achievementCases) {
        Long caseId = achievementCases.getId();
        Long currentUserId = SecurityUtils.getUserId();

        // 查询原数据
        AchievementCases old = achievementCasesMapper.selectAchievementCasesById(caseId);
        if (old == null) {
            throw new RuntimeException("案例不存在");
        }

        // 普通用户只能修改自己的
        if (!SecurityUtils.hasRole("admin") && SecurityUtils.hasRole("common") && !old.getUserId().equals(currentUserId)) {
            throw new RuntimeException("无权修改他人案例");
        }

        if (!SecurityUtils.hasRole("admin") && SecurityUtils.hasRole("common")) {
            Integer newStatus = achievementCases.getIsPublished();
            if (newStatus != null && newStatus == 1) {
                throw new RuntimeException("普通用户无权直接发布案例");
            }
            achievementCases.setIsPublished(2);
        }

        return achievementCasesMapper.updateAchievementCases(achievementCases);
    }

    /**
     * 批量删除成果展示案例
     *
     * @param ids 需要删除的成果展示案例主键
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteAchievementCasesByIds(Long[] ids)
    {
        Long currentUserId = SecurityUtils.getUserId();
        int count = 0;

        for (Long id : ids) {
            AchievementCases old = achievementCasesMapper.selectAchievementCasesById(id);
            if (old == null) {
                continue; // 或抛异常
            }

            // 普通用户只能删除自己的
            if (!SecurityUtils.hasRole("admin") && SecurityUtils.hasRole("common") && !old.getUserId().equals(currentUserId)) {
                throw new RuntimeException("此案例是他人发布的，无权删除");
            }

            achievementCasesMapper.deleteAchievementCasesById(id);
            count++;
        }

        return count;
//        return achievementCasesMapper.deleteAchievementCasesByIds(ids);
    }

    /**
     * 删除成果展示案例信息
     *
     * @param id 成果展示案例主键
     * @return 结果
     */
    @Override
    public int deleteAchievementCasesById(Long id)
    {
        Long currentUserId = SecurityUtils.getUserId();

        // 查询原案例
        AchievementCases old = achievementCasesMapper.selectAchievementCasesById(id);
        if (old == null) {
            throw new RuntimeException("案例不存在");
        }

        // 普通用户只能删除自己的案例
        if (!SecurityUtils.hasRole("admin") && SecurityUtils.hasRole("common") && !old.getUserId().equals(currentUserId)) {
            throw new RuntimeException("此案例是他人发布的，无权删除");
        }

        return achievementCasesMapper.deleteAchievementCasesById(id);
    }
}
